home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_c / cuj0696.zip / DWYER.ZIP / COUPON.TST / GENCPNDA.C < prev    next >
C/C++ Source or Header  |  1995-10-22  |  1KB  |  58 lines

  1. /* ============ */
  2. /* gencpnda.c    */
  3. /* ============ */
  4. #include <miscdefs.h>
  5. #include <cupndefs.h>
  6.  
  7. #include <string.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10.  
  11. static
  12. UCHAR    ChkBits[4096];
  13.  
  14. /* ==================================================================== */
  15. /* GenCouponData - Generates One Coupon Collector's Segment             */
  16. /* ==================================================================== */
  17. UINT
  18. GenCouponData(COUPON_DATA_STRU * CouponData)
  19. {
  20.     int     Next, NumFound, NumGen;
  21.     int     RandFound = FALSE;
  22.  
  23.     memset(ChkBits, 0, sizeof(ChkBits));
  24.  
  25.     NumFound = 0;
  26.     NumGen = 0;
  27.  
  28.     do
  29.     {
  30.     Next = CouponData->RandFun() % CouponData->SetSize;
  31.  
  32.     ++NumGen;
  33.  
  34.     if (TestBit(ChkBits, Next) == 0)
  35.     {
  36.         ++NumFound;
  37.         SetBit(ChkBits, Next, 1);
  38.     }
  39.     }
  40.     while ((NumFound < CouponData->SetSize) &&
  41.     NumGen <= CouponData->MaxGenPerSeg);
  42.  
  43.     if (NumFound >= CouponData->SetSize)
  44.     {
  45.     CouponData->CallStatusOK = TRUE;
  46.     }
  47.     else
  48.     {
  49.     CouponData->CallStatusOK = FALSE;
  50.  
  51.     fprintf(stderr,
  52.         "GenCouponData(): Failed to Collect a Segment\n");
  53.     fprintf(stderr,"\t\tNumber Found = %d\n", NumFound);
  54.     }
  55.  
  56.     return(NumGen);
  57. }
  58.